#include "Queue.h"

void QueueNoteInit(po*q)//初始化
{
    assert(q);
    q->Tail=NULL;
    q->Tail=NULL;
}

void QueueNotePush(po*q,Value x)//插入
{
        assert(q);
        QET*ptr=(QET*)malloc(sizeof(QET));
        if(ptr==NULL)
        {
          perror("ptr:");
        }
        ptr->data=x;

        if(q->Tail==q->First&&q->Tail==NULL)
        {

            q->Tail=q->First=ptr;

        }
        else
        {
            q->Tail->next=ptr;
            q->Tail=ptr;
        }
}


Value QueueFront(po* q)//头部数据
{
    assert(q);
    return q->First->data;
}

Value QueueBack(po* q)//尾部
{
    assert(q);
    return q->Tail->data;
}

int QueueSize(po* q)//队列内元素个数
{
    assert(q);
    if(QueueEmpty(q)==1)
    {
        return 0;
    }

    QET *cur=q->First;
    int count=0;
    while(cur!=q->Tail->next)
    {
        ++count;
        cur=cur->next;
    }
    return count;
}


int QueueEmpty(po* q)//判空
{
    assert(q);

    if(q->Tail==NULL)//空
    return 1;

    else//非
     return 0;
}

void QueuePop(po* q)// 队头出队列
{
    assert(q);
    if(QueueEmpty(q)==0)
    {

        QET *Next=q->First->next;
        QET*Head=q->First;
        printf("come->%d",Head->data);
        q->First=Next;
//      free(Head);
//      Head=NULL;
    }

}

// 销毁队列
void QueueDestroy(po* q)
{
    assert(q);
    assert(!QueueEmpty(q));
      QET*cur=q->First;
      while(cur!=q->Tail->next)
      {
          QET *Next=cur->next;
          free(cur);
          cur=Next;
      }
      q->Tail=NULL;
      q->First=NULL;

}

